11|贫血模式与充血模式

MVC是一种典型的贫血模型设计,违反了面向对象的设计原则,是一种面向过程的编程风格。

贫血模型与充血模式

什么是贫血模型的开发方式

传统的开发方式中,由于Entity和Repository组成数据访问层,Bo和Service组成业务逻辑层,Bo值包含数据,不包含业务逻辑,是典型的贫血模型设计,它将数据与操作分离,破坏了面向对象的封装特性,是典型的的面向过程的编程风格

什么是充血模型的DDD开发模式

充血模型: 将数据和业务逻辑封装在一个类中,满足面向对象的封装特性。

领域驱动设计(DDD):领域驱动设计可以知道解耦业务系统,划分业务模块,定义业务领域模型及其交互。随着微服务的概念兴起,领域驱动设计可以可以指导服务的划分。

区别

  • 基于贫血模型的传统开发模式中,Bo只包含数据,不包含业务逻辑(重service轻Bo)
  • 基于充血模型的DDD开发模型中,Domain既包含数据,又包含业务逻辑(轻service重Domain)

基于贫血的传统开发模式为何如此流行

  • 系统业务比较简单,不需要精心设计充血模型,设计的充血模型也比较单薄,意义不大。
  • 相较于贫血模型,充血模型设计难度大,需要一开始设计出暴露哪些接口,定义哪些业务逻辑。
  • 思维固化,不愿意转型。

哪些项目设计使用基于充血模型的DDD开发模式

  • 业务比较复杂的系统开发(如包含利息计算模型,还款模型的金融系统),越复杂的系统对代码的复用性,易维护性要求就越高。DDD开发模式需要我们前期做大量的业务调研,领域驱动设计。